Java: Ví dụ Commit và Rollback


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Để thực hiện quản lý Transaction cho riêng mình, đầu tiên bạn cần tắt chế độ auto-commit bằng cách truyền tham số false cho phương thức setAutoCommit().

Sau đó, khi bạn đã thực hiện các thay đổi với cơ sở dữ liệu và muốn ký thác (commit) các thay đổi đó, bạn sử dụng phương thức commit(). Hoặc bạn muốn xóa các thay đổi đã được thực hiện trước đó để quay về trạng thái trước khi thực hiện thay đổi khi thấy rằng có lỗi xảy ra, bạn sử dụng phương thức rollback().

Dưới đây là ví dụ minh họa cho hai hoạt động trên.

package solutions;

//Bước 1: import các package cn thiết
import java.sql.*;

public class ViDuJDBC {
  // Tên ca driver và đa ch URL ca cơ s d liu (DB)
  static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
  static final String DB_URL = "jdbc:mysql://localhost/sinhvien";

  // Tên đăng nhp và mt khu ca DB
  static final String USER = "root";
  static final String PASS = "";

  public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    try {
      // Bước 2: Đăng ký Driver
      Class.forName(JDBC_DRIVER);

      // Bước 3: M mt kết ni
      System.out.println("Đang kết ni ti cơ s d liu ...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      // Bước 4: Thiết lp auto commit là false.
      conn.setAutoCommit(false);

      // Bước 5: Thc thi truy vn
      System.out.println("To các lnh truy vn SQL ...");
      stmt = conn.createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_UPDATABLE);

      // Bước 6: Chèn mt hàng vào bng sinhvien
      System.out.println("\nChèn mt hàng ...");
      String SQL = "INSERT INTO sinhvienk60 " +
        "VALUES (5, 'Trn Văn', 'Anh', 7.5)";
      stmt.executeUpdate(SQL);

      // Bước 7: Chèn thêm mt hàng vào bng sinhvien
      SQL = "INSERT INTO sinhvienk60 " +
        "VALUES (6, 'Trương Vũ', 'Bình', 6.5)";
      stmt.executeUpdate(SQL);

      // Bước 8: Ký thác (commit) các thay đi
      System.out.println("\nKy thac cac thay doi ...");
      conn.commit();

      // Bước 9: Lit kê tt c các bn ghi.
      String sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60";
      ResultSet rs = stmt.executeQuery(sql);
      System.out.println("\nLDanh sách sinh viên:");
      printRs(rs);

      // Bước 10: Dn sch môi trường và gii phóng tài nguyên (resource)
      rs.close();
      stmt.close();
      conn.close();
    } catch (SQLException se) {
      // X lý các li cho JDBC
      se.printStackTrace();
      // Nếu xut hin li thì xóa sch các thay đi
      // và tr v trng thái trước khi có thay đi.
      System.out.println("\nQuay v trng thái trước khi có s thay đi ...");
      try {
        if (conn != null)
          conn.rollback();
      } catch (SQLException se2) {
        se2.printStackTrace();
      }
    } catch (Exception e) {
      // X lý các li cho Class.forName
      e.printStackTrace();
    } finally {
      // Khi finally được s dng đ đóng các resource
      try {
        if (stmt != null)
          stmt.close();
      } catch (SQLException se2) {
      }
      try {
        if (conn != null)
          conn.close();
      } catch (SQLException se) {
        se.printStackTrace();
      }
    }
    System.out.println("\nKết thúc!");
  }

  public static void printRs(ResultSet rs) throws SQLException {
    // Đm bo ta đã bt đu t hàng đu tiên
    rs.beforeFirst();
    while (rs.next()) {
      // Ly d liu thông qua truy xut đến tên ct
      int mssv = rs.getInt("mssv");
      int diemthi = rs.getInt("diemthi");
      String ho = rs.getString("ho");
      String ten = rs.getString("ten");

      // Hin th các giá tr      System.out.print("\nMSSV: " + mssv);
      System.out.print("\nH: " + ho);
      System.out.println("\nTên: " + ten);
      System.out.print("\nĐim thi: " + diemthi);
      System.out.print("\n=================");
    }
    System.out.println();
  }
}
» Tiếp: Kết nối Cơ sở dữ liệu Java với MySQL
« Trước: Cách kết nối tới các RDBMS trong Java JDBC
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!